#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>

using std::cout;
using std::endl;

///////////////////////////////////////////////////产生信号的方式：程序异常（硬件异常）///////////////////////////////////////////////////
void handerSig(int signal) //返回值为void，参数为int就行
{
    cout << "收到一个信号:"  << signal << endl;
    exit(13);
}

int main()
{
    for(int i = 1; i < 32; i++) //把所有信号自定义捕捉
        signal(i, handerSig);

    while(true)
    {
        printf("hello world, pid:%d\n", getpid());
        sleep(1);

        //int a = 10;
        // a /= 0;  //设置除0错误 
                    //会发送8号信号SIGFPE浮点数异常

        int *p = nullptr;
        *p = 1; //野指针问题
                //会发送11号信号SIGSEGV段错误
    }
    return 0;
}

////////////////////////////////////////////////产生信号的方式：系统调用////////////////////////////////////////////////

// void handerSig(int signal) //返回值为void，参数为int就行
// {
//     cout << "收到一个信号:"  << signal << endl;
//    // exit(2);
// }

// void handerSig(int signal) //返回值为void，参数为int就行
// {
//     cout << "收到一个信号:"  << signal << endl;
//    // exit(2);
// }

// int main()
// {
//  for(int i = 1; i < 32; i++) //把所有信号自定义捕捉
//         signal(i, handerSig);

//     while(true)
//     {
//         printf("hello world, pid:%d\n", getpid());
//         //abort发送的信号要求进程必须处理，目的就是终止进程
//         abort(); //发送指定信号：6号信号
//         sleep(1);
//     }
//     return 0;
// }

// int main()
// {
//     for(int i = 1; i < 32; i++) //把所有信号自定义捕捉
//         signal(i, handerSig);

//     for(int i = 1; i < 32; i++) //自己给自己发送所有信号
//     {
//         sleep(1);
//         if(i == 9 || i == 19) //9和19不会被捕捉
//             continue;
//         raise(i); //自己给自己发送信号
//     }

//     while(true)
//     {
//         printf("hello world, pid:%d\n", getpid());
//         sleep(1);
//     }
//     return 0;
// }

// int main()
// {
//     signal(2, handerSig);
//     while(true)
//     {
//         printf("hello world, pid:%d\n", getpid());
//         sleep(1);
//     }
//     return 0;
// }